/*
 * ErrorText.cpp
 *
 *  Created on: 2019年12月9日
 *      Author: terry
 */

#include "ErrorText.h"
#include <errno.h>
#include "HttpErrNo.h"

struct ErrorName
{
    int error;
    const char* name;
};

ErrorName s_errorTexts[] =
{
	{0, "\xE6\x88\x90\xE5\x8A\x9F"}, /// 成功.
	{EPERM, "\xE6\x97\xA0\xE6\x9D\x83\xE9\x99\x90"}, //无权限.
	{ENOENT,"\xE4\xB8\x8D\xE5\xAD\x98\xE5\x9C\xA8\xE8\xAF\xA5\xE5\xAF\xB9\xE8\xB1\xA1"},  ///不存在该对象.
	{ESRCH, "\xE6\xB2\xA1\xE6\x9C\x89\xE8\xBF\x99\xE4\xB8\xAA\xE8\xBF\x9B\xE7\xA8\x8B"},	/// 没有这个进程.
	{EINTR, "\xE4\xB8\xAD\xE6\x96\xAD"}, ///中断.
	{EIO,  "IO\xE9\x94\x99\xE8\xAF\xAF"},	/// IO错误.
	{ENXIO, "\xE6\xB2\xA1\xE6\x9C\x89\xE8\xAF\xA5\xE8\xAE\xBE\xE5\xA4\x87"}, ///没有该设备.
	{E2BIG, "\xE5\xA4\xAA\xE5\xA4\xA7"}, ///太大.
	{ENOEXEC,"\xE6\xA0\xBC\xE5\xBC\x8F\xE9\x94\x99\xE8\xAF\xAF"}, ///格式错误.
	{EBADF,  "\xE9\x94\x99\xE8\xAF\xAF\xE7\x9A\x84\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xB7"}, /// 错误的文件号.
	{ECHILD, "\xE6\xB2\xA1\xE6\x9C\x89\xE5\xAD\x90\xE5\x85\x83\xE7\xB4\xA0"}, /// 没有子元素.
	{EAGAIN,  "\xE8\xAF\xB7\xE9\x87\x8D\xE8\xAF\x95"}, ///请重试.
	{ENOMEM,  "\xE5\x86\x85\xE5\xAD\x98\xE4\xB8\x8D\xE8\xB6\xB3"}, /// 内存不足.
	{EACCES,  "\xE6\x97\xA0\xE6\xB3\x95\xE8\xAE\xBF\xE9\x97\xAE"}, /// 无法访问.
	{EFAULT,  "\xE6\x95\x85\xE9\x9A\x9C"}, ///故障.
	{EBUSY,   "\xE8\xAE\xBE\xE5\xA4\x87\xE5\xBF\x99"}, /// 设备忙.
	{EEXIST,  "\xE5\xB7\xB2\xE7\xBB\x8F\xE5\xAD\x98\xE5\x9C\xA8"}, ///已经存在.
	{EXDEV,   "\xE8\xB7\xA8\xE8\xAE\xBE\xE5\xA4\x87\xE9\x93\xBE\xE6\x8E\xA5"}, /// 跨设备链接.
	{ENODEV,  "\xE4\xB8\x8D\xE5\xAD\x98\xE5\x9C\xA8\xE8\xAF\xA5\xE8\xAE\xBE\xE5\xA4\x87"}, ///不存在该设备.
	{ENOTDIR, "\xE4\xB8\x8D\xE6\x98\xAF\xE7\x9B\xAE\xE5\xBD\x95"}, ///不是目录.
	{EISDIR,  "\xE6\x98\xAF\xE7\x9B\xAE\xE5\xBD\x95"}, ///是目录.
	{EFBIG,           "\xE6\x96\x87\xE4\xBB\xB6\xE5\xA4\xAA\xE5\xA4\xA7"}, ///文件太大.
	{ENOSPC,          "\xE7\xA9\xBA\xE9\x97\xB4\xE4\xB8\x8D\xE8\xB6\xB3"}, ///空间不足.
	{ESPIPE,          "\xE9\x9D\x9E\xE6\xB3\x95\xE5\xAE\x9A\xE4\xBD\x8D\xE6\x90\x9C\xE7\xB4\xA2"}, ///非法定位搜索.
	{EROFS,           "\xE5\x8F\xAA\xE8\xAF\xBB"}, /// 只读.
	{EMLINK,          "\xE5\xA4\xAA\xE5\xA4\x9A\xE9\x93\xBE\xE6\x8E\xA5"}, /// 太多链接.
	{EPIPE,           "\xE8\xBF\x9E\xE6\x8E\xA5\xE6\x96\xAD\xE5\xBC\x80"}, /// 连接断开.
	{EDOM,            "\xE9\x94\x99\xE8\xAF\xAF\xE7\x9A\x84\xE5\x8F\x82\xE6\x95\xB0\xE8\x8C\x83\xE5\x9B\xB4"}, /// 错误的参数范围.
	{EDEADLK,         "\xE9\x98\xBB\xE5\xA1\x9E\xE4\xBA\x86"}, /// 阻塞了.
	{ENAMETOOLONG,    "\xE5\x90\x8D\xE7\xA7\xB0\xE5\xA4\xAA\xE9\x95\xBF"}, /// 名称太长.
	{ENOLCK,          "\xE6\xB2\xA1\xE6\x9C\x89\xE5\x8F\xAF\xE7\x94\xA8\xE8\xAE\xB0\xE5\xBD\x95"}, /// 没有可用记录.
	{ENOSYS,          "\xE5\x8A\x9F\xE8\x83\xBD\xE6\xB2\xA1\xE6\x9C\x89\xE5\xAE\x9E\xE7\x8E\xB0"}, ///功能没有实现.
	{ENOTEMPTY,       "\xE4\xB8\x8D\xE6\x98\xAF\xE7\xA9\xBA\xE7\x9A\x84"},	///不是空的.

	{EINVAL, "\xE6\x97\xA0\xE6\x95\x88\xE5\x8F\x82\xE6\x95\xB0"}, ///无效参数.
	{ERANGE,  "\xE9\x94\x99\xE8\xAF\xAF\xE7\x9A\x84\xE8\x8C\x83\xE5\x9B\xB4"}, ///错误的范围.
	{EILSEQ,  "\xE9\x9D\x9E\xE6\xB3\x95\xE5\xAD\x97\xE8\x8A\x82\xE5\xBA\x8F"}, /// 非法字节序.


	{HTTP_ERR_NO_AUTH, "\xE7\xBC\xBA\xE5\xB0\x91\xE8\xAE\xA4\xE8\xAF\x81\x2C\x20\xE8\xAF\xB7\xE7\x99\xBB\xE5\xBD\x95"},	/// 缺少认证, 请登录.

};


ErrorText::ErrorText()
{
}

ErrorText::~ErrorText()
{
}

bool ErrorText::get(int err, std::string& text)
{
	bool found = false;
	size_t count = sizeof(s_errorTexts)/sizeof(s_errorTexts[0]);
	for (size_t i = 0; i < count; ++ i)
	{
	    if (s_errorTexts[i].error == err)
	    {
	        text = s_errorTexts[i].name;
	        found = true;
	        break;
	    }
	}
	return found;
}
